#include <iostream>
#include <string>
#include <cstdlib>
#include <ctime>
#include <memory>
#include <thread>
#include <functional>

using namespace std;

class A // 定义一个名为A的类
{
public: // 公共访问权限，表示以下成员可以在类外访问
    // 定义一个名为foo的成员函数，接受一个int类型的参数t，返回一个int类型的值
    int foo(int t)
    {
        // 使用标准输出流cout打印字符串"foo"和参数t的值，然后换行
        cout << "foo" << t << endl;
        for (int i = 0; i < 10 ; i++)
        {
            // 休眠1秒
            this_thread::sleep_for(chrono::seconds(1));
            // 使用标准输出流cout打印字符串"."
            cout << "." << flush;

        }
        // 返回整数值0

        return 0;
    }
};

int add(int a, int b)
{
    return a + b;
}
int sub(int a, int b)
{
    return a - b;
}

int main(int argc, char *argv[])
{

    // 创建一个A类的对象a
    A a;
    // 创建一个线程t1，该线程执行A类中的foo成员函数
    // 第一个参数是成员函数的地址，第二个参数是成员函数所属的对象a
    // 第三个参数是传递给foo函数的参数4
    thread t1(&A::foo, a, static_cast<int>('A'));
    // 等待线程t1执行完毕
    t1.join();
    cout << "main thread is over..." << endl;


    function<int (int, int)> f;
    f = add;
    cout << f(5, 3) << endl;


    // 返回0，表示程序正常结束
    return 0;
}